package pe.gob.osinergmin.interfase_siaf.dac.common.dao.impl;

import java.util.List;

import javax.sql.DataSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.stereotype.Repository;

import pe.gob.osinergmin.interfase_siaf.dac.common.dao.IntfCabDao;
import pe.gob.osinergmin.interfase_siaf.dac.domain.interfase.IntfCab;

@Repository("intfCabDao")
public class IntfCabDaoImpl implements IntfCabDao {
	
	private final Log logger = LogFactory.getLog(getClass());
 	
	
	private NamedParameterJdbcTemplate jdbcParameterTemplateInterfase;	
	//private JdbcTemplate jdbcTemplateInterfase;		
	
	
	@Autowired
	public void SetDataSource(DataSource dataSourceInterfase){
		//this.jdbcTemplateInterfase = new JdbcTemplate(dataSourceInterfase);
		this.jdbcParameterTemplateInterfase = new NamedParameterJdbcTemplate(dataSourceInterfase);		
	}
			
	/**DECLARACION DE SQL**/		
	/*private static final String SQL_INSERT_INTFCAB ="INSERT INTO INTF_CAB (SECUENCIAL,ANO_EJE,SEC_EJEC,CICLO,FASE,"
			+ " SEC_EJEC2,MES_EJE,TIPO_OPE,MOD_COMP,SEC_AREA,COD_DOC,SERIE_DOC,"
			+ " NUM_DOC,FEC_DOC,M_FECHA,ORIGEN,FTE_FIN,T_PAGO,T_RECURS, T_COMPRO,MONEDA,T_CAMBIO,"
			+ " UE_ENVIO,UE_ESTADO,INTF_EXP,ESTADO_REG,DATO_ORI,TIPO_FIN) "
			+ " VALUES (:secuencial, :anoEje, :secEjec, :ciclo, :fase, :secEjec2, :mesEje, :tipoOpe, "
			+ " :modComp, :secArea, :codDoc, :serieDoc, :numDoc, :fecDoc, :mFecha, :origen,"
			+ " :fteFin, :tPago, :tRecurs, :tCompro, :moneda, :tCambio, :ueEnvio, :ueEstado, :intfExp, :estadoReg, :datoOri, :tipoFin )";
	
	*/
	/**para consultar datos del intf_cab por el secuencial*/
	private static final String SQL_SELECT_INTFCAB_X_SECUENCIAL="SELECT "
			+ " estado,ue_estado,siaf_exp,siaf_sec,siaf_cor,intf_exp,"
			+ " intf_fase,intf_sec,intf_cor,mef_estado,mef_error,"
			+ " mef_mensa,estado_reg,dato_ori FROM INTF_CAB WHERE secuencial=:secuencial";
	
    private static final String SQL_SELECT_SECUENCIAL =
				" SELECT COUNT(secuencial) FROM intf_cab where secuencial=:secuencial ";
	
	/**IMPLEMENTACION DE METODOS*/
	
	/*@Override
	public void insertarIntfCab(IntfCab intfCab) throws Exception  {
		logger.info("Ingresando a insertar intfCab"); 
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(intfCab);
		int ok = this.jdbcParameterTemplateInterfase.update(SQL_INSERT_INTFCAB, parameters);
		logger.info("insertar intfCab OK :  " + ok); 
	}*/

	 @Override
	 public int verificarSecuencialCab(IntfCab c){
		 logger.info("Ingresando a verificar el secuencial intf_cab"); 
		 SqlParameterSource parameters = new BeanPropertySqlParameterSource(c);
		 return this.jdbcParameterTemplateInterfase.queryForInt(SQL_SELECT_SECUENCIAL, parameters);
	 }
	 
	 
	 /**metodo parqa consultar datos del intf_cab por el secuencial*/
	 
	 @Override
     public List<IntfCab> consultarDatosXSecuencial(IntfCab c) throws Exception {		 
			SqlParameterSource parameters = new BeanPropertySqlParameterSource(c);			
			RowMapper<IntfCab> lista = ParameterizedBeanPropertyRowMapper.newInstance(IntfCab.class);		
		    return this.jdbcParameterTemplateInterfase.query(SQL_SELECT_INTFCAB_X_SECUENCIAL, parameters, lista);
	  }    
	

}
